int load_roms;
unsigned int optionrom_start, optionrom_end;
+ void (*bios_load)(const struct bios_config *config);
+
void (*bios_info_setup)(void);
void (*bios_info_finish)(void);
- void (*bios_relocate)(void);
-
void (*vm86_setup)(void);
void (*e820_setup)(void);
bios->create_smbios_tables();
}
- printf("Loading %s ...\n", bios->name);
- memcpy((void *)bios->bios_address, bios->image,
- bios->image_size);
-
- if (bios->bios_relocate)
- bios->bios_relocate();
+ if (bios->bios_load) {
+ bios->bios_load(bios);
+ } else {
+ printf("Loading %s ...\n", bios->name);
+ memcpy((void *)bios->bios_address, bios->image,
+ bios->image_size);
+ }
if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) {
if ( bios->create_mp_tables )
memset(info, 0, sizeof(*info));
}
-static void rombios_relocate(void)
+static void rombios_load(const struct bios_config *config)
{
uint32_t bioshigh;
struct rombios_info *info;
+ printf("Loading %s ...\n", config->name);
+ memcpy((void *)config->bios_address, config->image,
+ config->image_size);
+
bioshigh = rombios_highbios_setup();
info = (struct rombios_info *)BIOS_INFO_PHYSICAL_ADDRESS;
.optionrom_start = OPTIONROM_PHYSICAL_ADDRESS,
.optionrom_end = OPTIONROM_PHYSICAL_END,
+ .bios_load = rombios_load,
+
.bios_info_setup = rombios_setup_bios_info,
.bios_info_finish = NULL,
- .bios_relocate = rombios_relocate,
-
.vm86_setup = rombios_init_vm86_tss,
.e820_setup = rombios_setup_e820,
.optionrom_start = 0,
.optionrom_end = 0,
+ .bios_load = NULL,
+
.bios_info_setup = seabios_setup_bios_info,
.bios_info_finish = seabios_finish_bios_info,
- .bios_relocate = NULL,
-
.vm86_setup = NULL,
.e820_setup = seabios_setup_e820,